package one.stand.service;

import one.stand.model.ResultModel;
import one.stand.request.SeeRecordHistoryRequest;
import one.stand.request.SeeRecordRequest;
import one.stand.request.statistics.*;
import one.stand.response.CrmCustomerAnalysisRespnse;
import one.stand.response.CrmSeeRecordResponse;
import one.stand.response.SeeRecordHistoryResponse;
import one.stand.response.statistics.SceneVisitStatisticsResponse;
import one.stand.response.statistics.SituationVisitStatisticsResponse;
import one.stand.response.statistics.TimeVisitStatisticsResponse;
import one.stand.response.statistics.VisitGoodsTopResponse;

import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 */
public interface SeeRecordService {

    /**
     * 客户分析
     *
     * @param request
     * @return
     */
    ResultModel customerAnalysis(SeeRecordRequest request);

    /**
     * 名片查看记录
     *
     * @param request
     * @return
     */
    ResultModel<List<CrmSeeRecordResponse>> getSeeRecordList(SeeRecordRequest request);

    /**
     * 客户兴趣统计
     *
     * @param request
     * @return
     */
    ResultModel<List<CrmCustomerAnalysisRespnse>> countCustomerAnalysis(SeeRecordRequest request);

    /**
     * CRM-PC端首页统计
     *
     * @param request
     * @return
     */
    ResultModel<Map<String, Object>> getPcCount(SeeRecordRequest request);

    /**
     * CRM-PC端首页转化率漏斗
     *
     * @param request
     * @return
     */
    ResultModel<Map<String, Object>> getChangeCount(SeeRecordRequest request);

    /**
     * 场景值入口统计
     * @param request 统计请求
     * @return 统计结果
     */
    ResultModel<SceneVisitStatisticsResponse> sceneStatistics(SceneVisitStatisticsRequest request);

    /**
     * 日期统计
     * @param request 统计请求
     * @return 统计结果
     */
    ResultModel<TimeVisitStatisticsResponse> timeStatistics(TimeVisitStatisticsRequest request);

    /**
     * 今日概况统计
     * @param request 统计请求
     * @return 统计结果
     */
    ResultModel<SituationVisitStatisticsResponse> situationStatistics(SituationVisitStatisticsRequest request);

    /**
     * 访问排名
     * @param request 访问排名请求
     * @return 访问排名列表
     */
    ResultModel<List<CrmSeeRecordResponse>> getVisitRankingList(VisitRankingRequest request);

    /**
     * 访问商品top3
     */
    ResultModel<List<VisitGoodsTopResponse>> getVisitGoodsTopN(VisitGoodsTopRequest request);

    /**
     * 商城访问概览
     */
    ResultModel<VisitMallStatisticsResponse> visitMallStatistics(VisitMallStatisticsRequest request);

    /**
     * 成交率 topN
     * 成交率计算方法
     * 对访问类型进行分组进行统计，然后加权计算
     * 访问名片超过5次 算20分，否则算 (次数/5)*20
     * 访问预约超过5次 算20分，否则算 (次数/5)*20
     * 访问商城超过5次 算30分，否则算 (次数/5)*30
     * 访问动态超过5次 算15分，否则算 (次数/5)*15
     * 访问官网超过5次 算15分，否则算 (次数/5)*15
     * 取值范围 [8.88, 89.99]
     */
    ResultModel<List<DealRateTopNResponse>> dealRateTopN(DealRateTopNRequest request);

    ResultModel<List<SeeRecordHistoryResponse>> getSeeRecordHistory(SeeRecordHistoryRequest request);
}
